package com.nageoffer.shortlink.project.common.convention.result;

import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serial;
import java.io.Serializable;

/**
 * 全局返回对象
 */
@Data
@Accessors(chain = true)
public class Result<T> implements Serializable {

    @Serial
    private static final long serialVersionUID = 5679018624309023727L;

    /**
     * 正确返回码
     */
    public static final String SUCCESS_CODE = "0";

    /**
     * 返回码
     */
    private String code;

    /**
     * 返回消息
     */
    private String message;

    /**
     * 响应数据
     */
    private T data;

    /**
     * 请求ID
     */
    private String requestId;

    /*
    即使你没有显式地调用 isSuccess() 方法，只要该对象包含这个方法，当它被序列化时，序列化框架就会根据方法名自动推测出相应的字段名（success）。
    所以，虽然 isSuccess() 方法没有被调用，它的存在会影响到序列化后的字段名。总结来说，success 字段并不是由方法调用生成的，
    而是由序列化工具根据 isSuccess 方法的命名规则自动推导出来的字段名。
     */
    public boolean isSuccess() {
        return SUCCESS_CODE.equals(code);
    }
}
